using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ibba.src.norisk.DataAccess;
using ibba.src.norisk.Contracts;

namespace ibba.src.norisk.BusinessLogic
{
    public class DeParaTipoLimiteBL
    {
        private DeParaTipoLimiteDB _deParaTipoLimiteDB;

        #region Construtor

        public DeParaTipoLimiteBL()
        {
            _deParaTipoLimiteDB = new DeParaTipoLimiteDB();
        }
        
        #endregion        

        #region Tipo Limite

        /// <summary>
        /// Recupera dos dominios de tipo limite;
        /// </summary>
        /// <returns>Colecao de tipos de limites</returns>
        public List<TipoLimite> ObterListaTipoLimite()
        {
            return _deParaTipoLimiteDB.ObterListaTipoLimite();
        }

        #endregion

        #region Produto

        /// <summary>
        /// Recupera lista de estrategias atreladas ao tipo de limite;
        /// </summary>
        /// <param name="codTipoLimite">Chave de identificacao do tipo de limite</param>
        /// <returns>Colecao de estrategias</returns>
        public List<ProdutoItau> ObterListaProdutoPorCodigoTipoLimite(int codTipoLimite)
        {
            return _deParaTipoLimiteDB.ObterListaProdutoPorCodigoTipoLimite(codTipoLimite);
        }

        /// <summary>
        /// Persiste colecao de produtos
        /// </summary>
        /// <param name="produtos">lista de produtos a serem persistidos</param>
        /// <returns>Retorna lista de produtos ja atrelados [caso exista]</returns>
        public List<TipoLimite> InserirProdutos(List<ProdutoItau> produtos)
        {
            return _deParaTipoLimiteDB.InserirProdutos(produtos);
        }

        /// <summary>
        /// Realiza a exclusao dos produtos;
        /// </summary>
        /// <param name="produtos">Lista de produtos a serem excluidos</param>
        public void ExcluirProdutos(List<ProdutoItau> produtos)
        {
            _deParaTipoLimiteDB.ExcluirProdutos(produtos);
        }

        /// <summary>
        /// Recupera a lista de produtos Itau atraves da descricao
        /// </summary>
        /// <param name="descricao">descricao do produto Itau para a realizacao de busca</param>
        /// <returns>Lista de produto Itau</returns>
        public List<ProdutoItau> ObterListaProdutoPorDescricao(string descricao)
        {
            return _deParaTipoLimiteDB.ObterListaProdutoPorDescricao(descricao);
        }

        #endregion

        #region Estrategia

        /// <summary>
        /// Recupera lista de estrategias atreladas ao tipo de limite;
        /// </summary>
        /// <param name="codTipoLimite">Chave de identificacao do tipo de limite</param>
        /// <returns>Colecao de estrategias</returns>
        public List<Estrategia> ObterListaEstrategiaPorCodigoTipoLimite(int codTipoLimite)
        {
            return _deParaTipoLimiteDB.ObterListaEstrategiaPorCodigoTipoLimite(codTipoLimite);
        }

        /// <summary>
        /// Persiste a lista de estrategias;
        /// </summary>
        /// <param name="estrategias">lista de produtos a serem persistidos</param>
        /// <returns>Retorna lista de estrategias ja atrelados [caso exista]</returns>
        public List<TipoLimite> InserirEstrategias(List<Estrategia> estrategias)
        {
            return _deParaTipoLimiteDB.InserirEstrategias(estrategias);
        }

        /// <summary>
        /// Realiza a exclusao das estrategias;
        /// </summary>
        /// <param name="produtos">Lista de estrategias a serem excluidas</param>
        public void ExcluirEstrategias(List<Estrategia> estrategias)
        {
            _deParaTipoLimiteDB.ExcluirEstrategias(estrategias);
        }

        /// <summary>
        /// Recupera lista de estrategias
        /// </summary>
        /// <param name="descricao">descricao da estrategia para realizacao de busca</param>
        /// <returns>Lista de estrategia</returns>
        public List<Estrategia> ObterListaEstrategiaPorDescricao(string descricao)
        {
            return _deParaTipoLimiteDB.ObterListaEstrategiaPorDescricao(descricao);
        }

        #endregion

        #region AreaInstitucional

        /// <summary>
        /// Recupera lista de estrategias atreladas ao tipo de limite;
        /// </summary>
        /// <param name="codTipoLimite">Chave de identificacao do tipo de limite</param>
        /// <returns>Colecao de estrategias</returns>
        public List<AreaInstitucional> ObterListaAreaInstPorCodigoTipoLimite(int codTipoLimite)
        {
            //return _deParaTipoLimiteDB.ObterListaAreaInstPorCodigoTipoLimite(codTipoLimite);
            return null;
        }

        /// <summary>
        /// Persiste a lista de estrategias;
        /// </summary>
        /// <param name="estrategias">lista de produtos a serem persistidos</param>
        /// <returns>Retorna lista de estrategias ja atrelados [caso exista]</returns>
        public List<TipoLimite> InserirAreaInstitucional(List<AreaInstitucional> areas)
        {
            return _deParaTipoLimiteDB.InserirAreaInstitucional(areas);
        }

        /// <summary>
        /// Realiza a exclusao das estrategias;
        /// </summary>
        /// <param name="produtos">Lista de estrategias a serem excluidas</param>
        public void ExcluirAreaInstitucional(List<AreaInstitucional> areas)
        {
            _deParaTipoLimiteDB.ExcluirAreaInstitucional(areas);
        }

        /// <summary>
        /// Recupera lista de estrategias
        /// </summary>
        /// <param name="descricao">descricao da estrategia para realizacao de busca</param>
        /// <returns>Lista de estrategia</returns>
        public List<AreaInstitucional> ObterListaAreaInstPorDescricao(string descricao)
        {
            return _deParaTipoLimiteDB.ObterListaAreaInstPorDescricao(descricao);
        }

        #endregion
    }
}
